perm filename NS3[F8,ALS] blob sn#321380 filedate 1977-12-15 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	        ST
C00029 ENDMK
CāŠ—;
        ST
        LIS  H'7'
        ADC          Next one to blink
        DS   0       Decrement counter
        BNZ  BLN3    Done?
BLN4    PK
INIT    DC   H'30'
        DC   H'10'   OBJ1 L.O. RP
        DC   H'5F'   TEXT LOW ORDER ROM
        DC   H'8C'   OBJ0 H.O.RP+OLOR
        DC   H'8F'   OBJ1 H.O.RP
        DC   H'EE'
        DC   H'08'   OBJ0 DELTA X ---
        DC   H'08'   OBJ1 DELTA X---
        DC   H'70'   TEXT OBJECT DELTA X
TY0     DC   H'3C'   OBJ0 DELTA Y ----
        DC   H'14'   OBJ1 DELTA Y ---
        DC   H'07'   TEXT OBJECT DELTA Y
        DC   H'0D'   OBJ0-X-CO
        DC   H'0D'   OBJ1 X-CO
        DC   H'1C'   TEXT OBJECT X COORD
        DC   H'48'   OBJ0 Y-VALUE L.O.A
        DC   H'C0'   OBJ1 Y-VALUE L.O.A
        DC   H'26'   TEXT OBJECT Y VAL LO A
        DC   H'00'   OBJ0 Y-VALUE H.0 &X-ORDER
        DC   H'01'   OBJ1- Y-VAL H.O.$X-ORDER
        DC   H'82'   TEXT OBJ INITIALLY OFF
UDIT    DC   H'30'
        DC   H'10'
        DC   H'5F'
        DC   H'8C'
        DC   H'8F'
        DC   H'EE'
        DC   H'3C'
        DC   H'14'
        DC   H'07'
TAB1    DC   H'0F10' BYTE 3
        DC   H'0D70' BYTE 2
        DC   H'0CD0' BYTE 1
        DC   H'0C30' BYTE 0
TAB2    DC   D'86'   RELATIVE SQUARE POSITION TABLE
        DC   D'84'
        DC   D'82'
        DC   D'80'
        DC   D'07'
        DC   D'05'
        DC   D'03'
        DC   D'01'
KING    DC   B'01011010' KING'S CROWN
        DC   B'00111100'
        DC   B'00011000'
REDP    DC   B'00111100' RED PIECE
        DC   B'01111110'
        DC   B'01111110'
        DC   B'01111110'
        DC   B'00111100'
BLKP    DC   B'00111100' BLACK PIECE
        DC   B'01000010'
        DC   B'01000010'
        DC   B'01000010'
        DC   B'00111100'
*-*-*- YMF
YMF     DC   H'0513' Y0
        DC   H'0300' U-
        DC   H'2913' MO
        DC   H'2F0B' VE
        DC   H'00'   -
        DC   H'1D'   F
        DC   H'0109' IR
        DC   H'2107' ST
        DC   H'00'   -
        DC   H'35'   ?
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'0500' Y-
        DC   H'1309' OR
        DC   H'00'   -
        DC   H'2B'   N
*-*-*-*-*-*-*-*-*-*-*-*-*-
*-*-*- SKL Skill text
SKL     DC   H'3119' CH
        DC   H'1313' OO
        DC   H'210B' SE
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'150B' KE
        DC   H'0500' Y-
        DC   H'00'   -
        DC   H'00'   -
        DC   H'1F11' DA
        DC   H'2F0B' VE
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'1F'   D
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
DICK    DC   H'2B01' NI
        DC   H'1127' AL
        DC   H'27'   L
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'2B'   N
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
HARY    DC   H'1109' AR
        DC   H'0719' TH
        DC   H'0309' UR
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'11'   A
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
        DC   H'00'   -
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
*MWAD*-WAIT, THEN UPDATE, AND KEEP THE*
*-*-*-*X ZOOM BIT SET PROPERLY DURING *
*-*-*-*DISPLAY MAINTENANCE.*-*-*-*-*-*-
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
MWAD    LR   K,P     SAVE RETURN ADDRESS
        PI   PUSH    AND PUSH ONTO STACK
        PI   DAI     DISABLE INTERRUPTS
        PI   WAIT    WAIT ON APPROPRIATE LINE
        DCI  CMRG    DCO TO PROG COPY COMREG
        LI   MSK     MASK IN
        XM           TURN OFF XZOOM
        DCI  H'8F7'  IN THE UM1 COPY
        ST           ONLY
        PI   UDAT    NOW DO UPDATE
        LI   XZOP    SET LINE FOR RESTORE XZOOM
MWD1    DCI  H'8FB'  DCO TO CURRENT LINE
        CM           COMPARE
        BNZ  MWD1    REACHED IT YET?
        DCI  CMRG    YES
        LM
        DCI  H'8F7'  NOW RESET UM1 COPY
        ST
        PI   POPS    POP RETURN ADDRESS
        PK           AND RETURN
*-*-*- Interrupt enable for update
ENIN    LI   INHR:
        OUTS H'C'
        LI   INHR.
        OUTS H'D'    SET INTERRUPT VECTOR
        DCI  H'8F0'
        LI   ULIN
        ST           SET INTERRUPT LINE
        DCI  CMRG    DCO TO PROG COPY COMREG
        LR   Q,DC    SAVE ADDRESS IN Q RES
        LIS  H'8'
        OM
        LR   DC,Q
        ST           IN PROGRAM COPY
        DCI  H'8F7'
        ST           DITTO UM1 COPY
        LIS  H'1'
        OUTS H'E'    ENABLE SMI...
        EI           ENABLE CPU
        LR   J,W     SAVE SAME STATUS
        POP          AND RETURN
*-*-*- Interrupt disable
DAI     DI           DISABLE CPU INTERRUPT
        LR   J,W     SET J ACCORDINGLY
        DCI  CMRG    DCO TO PROG COPY COMREG
        LR   Q,DC    SAVE ADDRESS
        LIS  H'8'
        COM
        NM           TURN OFF BIT
        LR   DC,Q    IN THE
        ST           PROGRAM COPY,
        DCI  H'8F7'
        ST           AND THE UM1 COPY
        CLR
        OUTS H'E'    NOW DISABLE SMI
        POP          AND RETURN
*-*-*-* SCRD SCRATCHPAD TO RAM DIRECT
*
SCRD    LR   K,P     SAVE RETURN ADDRESS
        LISU PLOC
        LISL 0
SCD1    LR   A,I
        ST
        BR7  SCD1
        LR   A,I
        ST
        LISU KLOC
SCD2    LR   A,I
        ST
        BR7  SCD2
        LR   A,I
        ST
        PK           DONE, SO RETURN
*-*-INHR Interrupt handler, saves and restores data
INHR    LR   8,A     SAVE ACC
        LR   A,IS
        LISU 6
        LISL 0
        LR   I,A     SAVE ISAR IN REG O'60'
        LR   A,HU
        LR   I,A     SAVE HU IN REG O'61'
        LR   A,HL
        LR   I,A     SAVE HL IN REG O'62'
        LR   A,J
        LR   I,A     SAVE J REG IN REG O'63'
        LR   H,DC    SAVE OLD DCO
        DCI  RGSV    DCO TO SAVE AREA START
        LR   A,HU
        ST
        LR   A,HL
        ST           SAVE OLD DCO IN RGSV,RGSV+1
        XDC
        LR   H,DC
        XDC
        LR   A,HU
        ST
        LR   A,HL
        ST           SAVE OLD DC1 IN RGSV+2,RGSV+3
        LR   A,KU
        ST
        LR   A,KL
        ST           SAVE K REG IN RGSV+4,RGSV+5
        LR   K,P     PC1 INTO K REGISTER
        LR   A,KU
        ST
        LR   A,KL
        ST           PC1 INTO RGSV+6,RGSV+7
        LR   J,W     SAVE OLD STATUS
        LISU 2
        LISL 3
INH2    LR   A,D
        ST           SP23,22,21,20 IN, RESP.
        BR7  INH2    RGSV+8,+9,+A,+B
        DCI  CMRG    DCO TO COMMAND REGISTER
        LI   MSK     MASK ON
        XM           TURN OFF X ZOOM BIT
        DCI  H'8F7'  IN THE UM1
        ST           COMMAND REGISTER
        PI   UDAT    UPDATE UM1 DISPLAY REGISTERS
        LI   XZOP    SET LINE FOR XZOOM ON
INH1    DCI  H'8FB'  DCO TO CURRENT Y LO
        CM           COMPARE
        BNZ  INH1    DIFFERENT?
        DCI  CMRG    NO. RESTORE X ZOOM
        LM           FROM OLD COPY
        DCI  H'8F7'  TO THE UM1 COPY
        ST
*
* RESTORE ALL REGISTERS
*
        DCI  RGSV    DCO TO SAVE AREA
        LM
        LR   HU,A
        LM
        LR   HL,A    OLD DCO TO H REG
        XDC
        LR   DC,H    NOW INTO DCO
        XDC          AND INTO DC1
        LM
        LR   HU,A
        LM
        LR   HL,A    OLD DC1 INTO H REGISTER
        LIS  H'2'
        ADC          BYPASS K FOR A MOMENT
        LM
        LR   KU,A
        LM
        LR   KL,A
        LR   P,K     RESTORE PC1
        LISU 2
        LISL 3
INH3    LM           RESTORE SP20-23 FROM
        LR   D,A     RGSV+8,+9,+A,+B
        BR7  INH3
        DCI  RGSV+4
        LM
        LR   KU,A
        LM
        LR   KL,A    RESTORE K REGISTER
        LR   DC,H    RESTORE DC1
        XDC          AND SET DCO&DC1 PROPERLY
        LR   W,J     NOW RESTORE STATUS AT ENTRY
*
* NOW RESTORE J,H,A FROM SCRATCH PAD
*
        LISU 6
        LISL 3
        LR   A,D     GET J
        LR   J,A
        LR   A,D     GET HL
        LR   HL,A
        LR   A,D
        LR   HU,A    RESTORE HU
        LR   A,D     GET ISAR
        LR   IS,A    RESTORE ISAR
        LR   A,8     RESTORE A
        EI           INT. ENABLE
        POP
*-*-*- Initial moves for red
REDM   DC      B'00000111'      3 pieces
       DC      B'00001010'      Byte 2, RB
       DC      B'00001111'      4 pieces
       DC      B'00001011'      Byte 2, LB
       DC      H'00'
*-*-*-*-*-*-*-*-*-*
*First replies (maximum of 4 each)
BOK2    DC      H'33'   24,20  24-20    To 12-16
        DC      H'33'   24-20, 24-20
        DC      H'43'   23-19, 24-20    To 11-15
        DC      H'20'   22-17, 24-19
        DC      H'22'   22-17, 22-17    To 10-14
        DC      H'22'   22-17, 22-17
        DC      H'55'   22-18, 22-18    To  9-13
        DC      H'55'   22-18, 22-18
        DC      H'31'   24-20, 23-18    To 11-16
        DC      H'45'   24-19, 22-18
        DC      H'66'   21-17, 21-17    To 10-15
        DC      H'66'   21-17, 21-17
        DC      H'55'   22-18, 22-18    To  9-14
        DC      H'55'   22-18, 22-18
*-*-*-
WAST    LR      K,P        Delay loop to WASTE some time
WAS2    LIS     H'F'
        LR      1,A
WAS3    CLR
        LR      2,A
WAS4    DS      2
        BNZ     WAS4
        DS      1
        BNZ     WAS3
        PK
*
STOP    DCI     SCOR            What kind of score?
        LM
        CI      H'3F'           Does the machine have a win?
        BNZ     STO1            No
        LM                      Yes, at what ply?
        COM
        INC
        LR      4,A
        LIS     H'7'            "I can win in "
        BR      STO2
STO1    CI      H'C1'           Does player have a win?
        BNZ     STO6            No
        LM                      Yes, at what ply?
        LR      4,A
        LIS     H'8'            "You can win in "
STO2    LR      0,A
        PI      WMC             Write message
        PI      MWAD            Wait then update
        LR      A,4
        AI      H'3F'
        CI   H'9'
        BC   STO5    OVER 9?
        LIS  H'9'    YES, SET TO 9
STO5    LR      TEMP,A
        LR      4,A      SET NUMBER IN R4
        PI      WDG             Report ply
        PI      MWAD            Wait then update
        PI      ENIN            Enable interrupts
        CLR
        LR      3,A
STO3    PI      WAST            Leave message up awhile
        DS      3
        BNZ     STO3
        LR      A,4
        CI      H'2'            Early warning only?
        BC      STO4
STO6    JMP     AFTT            YES
STO4    PI   MWAD    Do wait, then update
        DCI  H'872'
        LI   H'82'
        ST           TURN MESSAGE OFF
        LR   A,0     Get message type
        LR   6,A     And save in REG 6
ZS0     LIS  H'D'
        LR   1,A     Set NOTE COUNT (14 NOTES)
ZS1     LIS  H'7'    Set mask
        XS   6
        DCI  TUN2    Default tune--for Player win
        BNZ  ZS2     Computer wins?
        DCI  TUN1    Yes, set tune accordingly
ZS2     LR   A,1     Get current NOTE COUNT
        SL   1
        AS   1       Mult by three for proper offset
        ADC          And add it in
        LISU 4
        LISL 4
        LM           Get DELTA LINE count
        LR   D,A     Into SP44
        LM
        LR   S,A     Get LEVEL into SP43
        LM           And get DURATION into
        LR   5,A     REG 5
        PI   SNE     Enable sound
ZS3     PI   WAUD    And wait
        DS   5       Decrement DURATION
        BNZ  ZS3     Done with NOTE?
        DS   1       Yes, decrement NOTE COUNT
        BP   ZS1     Done all of SONG?
        LI   H'A0'   YES
        LR   1,A     Set counter
ZS4     PI   MWAD    Delay
        DS   1       For approximately
        BNZ  ZS4     2.7 Seconds
        JMP  H'4000' And return to RESIDENT
FLSH    DCI  SELX    DCO TO MOVE NUMBER
        LIS  H'2'
        CM
        BC   FLS5    PAST BOOK MOVES?
        PI   BORD    NO, JUST DISPLAY BOARD
FLS6    JMP  PMOV    AND GO PLAYERS MOVE
FLS5    PI   MWAD    WAIT, THEN UPDATE
        DCI  H'872'  DISABLING INT. AT SAME TIME
        LI   H'82'
        ST           TURN OFF MESSAGE OBJECT
        LISU 4
        LISL 4
        LI   H'30'
        LR   D,A     SET DELTA LINE
        LIS  H'3'
        LR   S,A     SET LEVEL
        PI   SNE     ENABLE SOUND
        LIS  H'F'
        LR   6,A     SET DURATION
FLS1    PI   WAUD    WAIT, THEN UPDATE
        DS   6
        BNZ  FLS1    BEEPED LONG ENOUGH?
        PI   DAI     YES, DISABLE SOUND
        LIS  H'5'
        LR   6,A     SET BLINK COUNT
FLS2    DCI  TRE2
        PI   RASC    GET BOARD AFTER PLAYER MOVE
        DCI  H'0E30' DCO TO TEMP AREA
        LR   Q,DC    SAVE ADDRESS
        PI   SCRA    SCRATCH TO RAM, REVERSED
        LR   DC,Q    RECOVER ADDRESS
        PI   RASC    AND INTO SCRATCHPAD
        PI   WAUD    NOW DO UPDATE
        PI   ENIN
        PI   BORD    DISPLAY BOARD
        LI   H'20'
        LR   3,A     SET COUNTER
FLS3    PI   MWAD    WAIT A BIT
        DS   3
        BNZ  FLS3
        DCI  TREE
        PI   RASC    BOARD AFTER MACHINE MOVE
        PI   ENIN
        PI   BORD    DISPLAYED
        LI   H'20'
        LR   3,A
FLS4    PI   MWAD    WAIT A MOMENT
        DS   3
        BNZ  FLS4
        DS   6
        BNZ  FLS2    DONE ENOUGH TIMES?
        BR   FLS6    YES,GOTO PLAYER MOVE
*-*-*-
SELE    PI      WAST      TIMING DELAY
SEL2    LISU    PLOC
        LISL    0
        LR      DC,H
        LIS     H'C'            To get MOVE byte
        ADC
        LM
        LR      0,A             Save it temporarily
        NS      0               To set status byte
        BNZ     SEL3
        JMP     NEXT            To get next MOVE byte
SEL3    CLR
        COM                     -1 in A
        ADC                     Get back to move byte
        AS      0
        NS      0               Remove right-most on-bit
        ST                      Put remaining bits back (and index)
        XS      0               This gets the extracted bit
        LR      6,A             Save it in 6
        LM                      Now get the byte designation
SEL4    LR      5,A
        SR      1
        SR      1
        NI      H'3'            Separate the byte indicator part
        LR      4,A             Save it in 4
        LR      A,5
        NI      H'13'           Separate the JUMP bit and the direction
        LR      5,A             Save them in 5
DELE    LI      ISA             Process Active and Kings for source dele
        AS      4               Add byte #
        LR      IS,A            Get to initial byte
        LR      A,S
        LR      3,A
        XS      6               Delete moving piece
        LR      S,A             from byte
        LISU    KLOC            To get to corresponding KING byte
        LR      A,S
        NS      6               Was the piece a king?
        BZ      DEL2
        XS      S               If it was delete king bit
        LR      S,A
        LIS     H'7'            Non-zero in 2 for king
DEL2    LR      2,A             0 for man, 7 for king, (later 1 for prom
        LISU    PLOC            Back to active section
*Now locate captured piece if jump or find destination in normal move
        LR      A,6             Recall MOVE bit
        SR      4
        BZ      INRH            Bit was in right half of byte
INLH    LR      3,A             Save partially shifted MOVE bit
        LIS     H'1'            Get direction
        NS      5               To test right-most bit
        BZ      INL2            RF or LB move where 4 shift is correct
        LR      A,3
        SR      1               LF and LB require an additional shift
        LR      3,A
INL2    LIS     H'2'            Now test for fore or aft
        NS      5
        BZ      BOTH            Forward move, no byte shift needed
        LR      A,D             Only to decrement ISAR
INL3    BR      BOTH
*
INRH    LR      A,6             Get MOVE bit again
        SL      4               Left shift if in right half
        LR      3,A             Save partially shifted MOVE bit
        LIS     H'1'
        NS      5               Get direction
        BNZ     INR2            LF or LB where 4 shift is correct
        LR      A,3
        SL      1               RF and RB require an additional shift
        LR      3,A
INR2    LIS     H'2'            Now test fore and aft
        NS      5